home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / term / object.h < prev    next >
C/C++ Source or Header  |  1998-04-15  |  12KB  |  418 lines

  1. /*
  2.  * FIG : Facility for Interactive Generation of figures
  3.  * Copyright (c) 1985 by Supoj Sutanthavibul
  4.  * Parts Copyright (c) 1994 by Brian V. Smith
  5.  * Parts Copyright (c) 1991 by Paul King
  6.  *
  7.  * The X Consortium, and any party obtaining a copy of these files from
  8.  * the X Consortium, directly or indirectly, is granted, free of charge, a
  9.  * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
  10.  * nonexclusive right and license to deal in this software and
  11.  * documentation files (the "Software"), including without limitation the
  12.  * rights to use, copy, modify, merge, publish, distribute, sublicense,
  13.  * and/or sell copies of the Software, and to permit persons who receive
  14.  * copies from any such party to do so, with the only requirement being
  15.  * that this copyright notice remain intact.  This license includes without
  16.  * limitation a license to do the foregoing actions under any patents of
  17.  * the party supplying this software to the X Consortium.
  18.  */
  19.  
  20. /* This file has been modified for use with Gnuplot 3.6 by
  21.  * Ian MacPhedran.
  22.  */
  23.  
  24. /* DEFAULT is used for many things - font, color etc */
  25.  
  26. #define        DEFAULT              (-1)
  27. #define        SOLID_LINE        0
  28. #define        DASH_LINE        1
  29. #define        DOTTED_LINE        2
  30. #define        RUBBER_LINE        3
  31. #define        PANEL_LINE        4
  32.  
  33. #define        Color            int
  34.  
  35. #define        BLACK            0
  36. #define        BLUE            1
  37. #define        GREEN            2
  38. #define        CYAN            3
  39. #define        RED            4
  40. #define        MAGENTA            5
  41. #define        YELLOW            6
  42. #define        WHITE            7
  43.  
  44. /** VERY IMPORTANT:  The f_line, f_spline and f_arc objects all must have the
  45.         components up to and including the arrows in the same order.
  46.         This is for the get/put_generic_arrows() in e_edit.c.
  47. **/
  48.  
  49. typedef struct f_point {
  50.     int            x, y;
  51. }
  52.         F_point;
  53.  
  54. typedef struct f_pos {
  55.     int            x, y;
  56. }
  57.         F_pos;
  58.  
  59. #define DEF_ARROW_WID (4 * ZOOM_FACTOR)
  60. #define DEF_ARROW_HT (8 * ZOOM_FACTOR)
  61.  
  62. typedef struct f_arrow {
  63.     int            type;
  64.     int            style;
  65.     float        thickness;
  66.     float        wid;
  67.     float        ht;
  68. }
  69.         F_arrow;
  70.  
  71. typedef struct f_ellipse {
  72.     int            tagged;
  73.     int            distrib;
  74.     int            type;
  75. #define                    T_ELLIPSE_BY_RAD    1
  76. #define                    T_ELLIPSE_BY_DIA    2
  77. #define                    T_CIRCLE_BY_RAD        3
  78. #define                    T_CIRCLE_BY_DIA        4
  79.     int            style;
  80.     int            thickness;
  81.     Color        pen_color;
  82.     Color        fill_color;
  83.     int            fill_style;
  84.     int            depth;
  85.     float        style_val;
  86.     int            pen_style;
  87.     float        angle;
  88.     int            direction;
  89. #define                    UNFILLED    -1
  90.     struct f_pos    center;
  91.     struct f_pos    radiuses;
  92.     struct f_pos    start;
  93.     struct f_pos    end;
  94.     struct f_ellipse *next;
  95. }
  96.         F_ellipse;
  97.  
  98. /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_arc STRUCTURE */
  99.  
  100. typedef struct f_arc {
  101.     int            tagged;
  102.     int            distrib;
  103.     int            type;
  104.                 /* note: these arc types are the internal values */
  105.                 /* in the file, they are open=1, wedge=2 */
  106. #define                    T_OPEN_ARC        0
  107. #define                    T_PIE_WEDGE_ARC        1
  108.     int            style;
  109.     int            thickness;
  110.     Color        pen_color;
  111.     Color        fill_color;
  112.     int            fill_style;
  113.     int            depth;
  114.     int            pen_style;
  115.     struct f_arrow *for_arrow;
  116.     struct f_arrow *back_arrow;
  117. /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
  118.     int            cap_style;
  119.     float        style_val;
  120.     int            direction;
  121.     struct {
  122.     float        x, y;
  123.     }            center;
  124.     struct f_pos    point[3];
  125.     struct f_arc   *next;
  126. }
  127.         F_arc;
  128.  
  129. #define        CLOSED_PATH        0
  130. #define        OPEN_PATH        1
  131. #define        DEF_BOXRADIUS        7
  132. #define        DEF_DASHLENGTH        4
  133. #define        DEF_DOTGAP        3
  134.  
  135. typedef struct f_pic {
  136. #ifndef PATH_MAX
  137. #define PATH_MAX 128
  138. #endif
  139.     char        file[PATH_MAX];
  140.     int            subtype;
  141. #define T_PIC_EPS    1
  142. #define T_PIC_BITMAP    2
  143. #define T_PIC_PIXMAP    3
  144. #define T_PIC_GIF    4
  145. #define FileInvalid    -2
  146.     int            flipped;
  147.     unsigned char   *bitmap;
  148.     int            numcols;        /* number of colors in cmap */
  149.     float        hw_ratio;
  150.     int            size_x, size_y;    /* fig units */
  151.     struct f_pos    bit_size;        /* pixels */
  152.     Color        color;        /* only used for XBM */
  153.     int            pix_rotation, pix_width, pix_height, pix_flipped;
  154. }
  155.         F_pic;
  156.  
  157. extern char    EMPTY_PIC[];
  158.  
  159. /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_line STRUCTURE */
  160.  
  161. typedef struct f_line {
  162.     int            tagged;
  163.     int            distrib;
  164.     int            type;
  165. #define                    T_POLYLINE    1
  166. #define                    T_BOX        2
  167. #define                    T_POLYGON    3
  168. #define                    T_ARC_BOX    4
  169. #define                    T_PIC_BOX    5
  170.     int            style;
  171.     int            thickness;
  172.     Color        pen_color;
  173.     Color        fill_color;
  174.     int            fill_style;
  175.     int            depth;
  176.     int            pen_style;
  177.     struct f_arrow *for_arrow;
  178.     struct f_arrow *back_arrow;
  179. /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
  180.     int            cap_style;        /* line cap style - Butt, Round, Bevel */
  181. #define                    CAP_BUTT    0
  182. #define                    CAP_ROUND    1
  183. #define                    CAP_PROJECT    2
  184.     struct f_point *points;    /* this must immediately follow cap_style */
  185.     int            join_style;        /* join style - Miter, Round, Bevel */
  186. #define                    JOIN_MITER    0
  187. #define                    JOIN_ROUND    1
  188. #define                    JOIN_BEVEL    2
  189.     float        style_val;
  190.     int            radius;        /* corner radius for T_ARC_BOX */
  191.     struct f_pic   *pic;
  192.     struct f_line  *next;
  193. }
  194.         F_line;
  195.  
  196. typedef struct f_text {
  197.     int            tagged;
  198.     int            distrib;
  199.     int            type;
  200. #define                    T_LEFT_JUSTIFIED    0
  201. #define                    T_CENTER_JUSTIFIED    1
  202. #define                    T_RIGHT_JUSTIFIED    2
  203.     int            font;
  204. /*    PIX_FONT        fontstruct; */
  205.     int            size;    /* point size */
  206.     Color        color;
  207.     int            depth;
  208.     float        angle;    /* in radians */
  209.  
  210.     int            flags;
  211. #define                    RIGID_TEXT        1
  212. #define                    SPECIAL_TEXT        2
  213. #define                    PSFONT_TEXT        4
  214. #define                    HIDDEN_TEXT        8
  215.  
  216.     int            ascent;    /* Fig units */
  217.     int            length;    /* Fig units */
  218.     int            descent;    /* from XTextExtents(), not in file */
  219.     int            base_x;
  220.     int            base_y;
  221.     int            pen_style;
  222.     char       *cstring;
  223.     struct f_text  *next;
  224. }
  225.         F_text;
  226.  
  227. #define MAXFONT(T) (psfont_text(T) ? NUM_FONTS : NUM_LATEX_FONTS)
  228.  
  229. #define        rigid_text(t) \
  230.             (t->flags == DEFAULT \
  231.                 || (t->flags & RIGID_TEXT))
  232.  
  233. #define        special_text(t) \
  234.             ((t->flags != DEFAULT \
  235.                 && (t->flags & SPECIAL_TEXT)))
  236.  
  237. #define        psfont_text(t) \
  238.             (t->flags != DEFAULT \
  239.                 && (t->flags & PSFONT_TEXT))
  240.  
  241. #define        hidden_text(t) \
  242.             (t->flags != DEFAULT \
  243.                 && (t->flags & HIDDEN_TEXT))
  244.  
  245. #define        text_length(t) \
  246.             (hidden_text(t) ? hidden_text_length : t->length)
  247.  
  248. #define        using_ps    (cur_textflags & PSFONT_TEXT)
  249.  
  250. typedef struct f_control {
  251.     float        lx, ly, rx, ry;
  252.     struct f_control *next;
  253. }
  254.         F_control;
  255.  
  256. /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_spline STRUCTURE */
  257.  
  258. #define        int_spline(s)        (s->type & 0x2)
  259. #define        normal_spline(s)    (!(s->type & 0x2))
  260. #define        closed_spline(s)    (s->type & 0x1)
  261. #define        open_spline(s)        (!(s->type & 0x1))
  262.  
  263. typedef struct f_spline {
  264.     int            tagged;
  265.     int            distrib;
  266.     int            type;
  267. #define                    T_OPEN_NORMAL    0
  268. #define                    T_CLOSED_NORMAL 1
  269. #define                    T_OPEN_INTERP    2
  270. #define                    T_CLOSED_INTERP 3
  271.     int            style;
  272.     int            thickness;
  273.     Color        pen_color;
  274.     Color        fill_color;
  275.     int            fill_style;
  276.     int            depth;
  277.     int            pen_style;
  278.     struct f_arrow *for_arrow;
  279.     struct f_arrow *back_arrow;
  280. /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */
  281.     int            cap_style;
  282.     /*
  283.      * For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while
  284.      * they are knots for T_OPEN_INTERP and T_CLOSED_INTERP whose control
  285.      * points are stored in controls.
  286.      */
  287.     struct f_point *points;    /* this must immediately follow cap_style */
  288.     float        style_val;
  289.     struct f_control *controls;
  290.     struct f_spline *next;
  291. }
  292.         F_spline;
  293.  
  294. typedef struct f_compound {
  295.     int            tagged;
  296.     int            distrib;
  297.     struct f_pos    nwcorner;
  298.     struct f_pos    secorner;
  299.     struct f_line  *lines;
  300.     struct f_ellipse *ellipses;
  301.     struct f_spline *splines;
  302.     struct f_text  *texts;
  303.     struct f_arc   *arcs;
  304.     struct f_compound *compounds;
  305.     struct f_compound *next;
  306. }
  307.         F_compound;
  308.  
  309. typedef struct f_linkinfo {
  310.     struct f_line  *line;
  311.     struct f_point *endpt;
  312.     struct f_point *prevpt;
  313.     int            two_pts;
  314.     struct f_linkinfo *next;
  315. }
  316.         F_linkinfo;
  317.  
  318. /* separate the "type" and the "style" from the cur_arrowtype */
  319. #define        ARROW_TYPE(x)    ((x)==0? 0 : ((x)+1)/2)
  320. #define        ARROW_STYLE(x)    ((x)==0? 0 : ((x)+1)%2)
  321.  
  322. #define        ARROW_SIZE    sizeof(struct f_arrow)
  323. #define        POINT_SIZE    sizeof(struct f_point)
  324. #define        CONTROL_SIZE    sizeof(struct f_control)
  325. #define        ELLOBJ_SIZE    sizeof(struct f_ellipse)
  326. #define        ARCOBJ_SIZE    sizeof(struct f_arc)
  327. #define        LINOBJ_SIZE    sizeof(struct f_line)
  328. #define        TEXOBJ_SIZE    sizeof(struct f_text)
  329. #define        SPLOBJ_SIZE    sizeof(struct f_spline)
  330. #define        COMOBJ_SIZE    sizeof(struct f_compound)
  331. #define        PIC_SIZE    sizeof(struct f_pic)
  332. #define        LINKINFO_SIZE    sizeof(struct f_linkinfo)
  333.  
  334. /**********************  object codes  **********************/
  335.  
  336. #define        O_COLOR_DEF    0
  337. #define        O_ELLIPSE    1
  338. #define        O_POLYLINE    2
  339. #define        O_SPLINE    3
  340. #define        O_TEXT        4
  341. #define        O_ARC        5
  342. #define        O_COMPOUND    6
  343. #define        O_END_COMPOUND    -O_COMPOUND
  344. #define        O_ALL_OBJECT    99
  345.  
  346. /********************* object masks for update  ************************/
  347.  
  348. #define M_NONE            0x000
  349. #define M_POLYLINE_POLYGON    0x001
  350. #define M_POLYLINE_LINE        0x002
  351. #define M_POLYLINE_BOX        0x004    /* includes ARCBOX */
  352. #define M_SPLINE_O_NORMAL    0x008
  353. #define M_SPLINE_C_NORMAL    0x010
  354. #define M_SPLINE_O_INTERP    0x020
  355. #define M_SPLINE_C_INTERP    0x040
  356. #define M_TEXT_NORMAL        0x080
  357. #define M_TEXT_HIDDEN        0x100
  358. #define M_ARC            0x200
  359. #define M_ELLIPSE        0x400
  360. #define M_COMPOUND        0x800
  361.  
  362. #define M_TEXT        (M_TEXT_HIDDEN | M_TEXT_NORMAL)
  363. #define M_SPLINE_O    (M_SPLINE_O_NORMAL | M_SPLINE_O_INTERP)
  364. #define M_SPLINE_C    (M_SPLINE_C_NORMAL | M_SPLINE_C_INTERP)
  365. #define M_SPLINE_NORMAL (M_SPLINE_O_NORMAL | M_SPLINE_C_NORMAL)
  366. #define M_SPLINE_INTERP (M_SPLINE_O_INTERP | M_SPLINE_C_INTERP)
  367. #define M_SPLINE    (M_SPLINE_NORMAL | M_SPLINE_INTERP)
  368. #define M_POLYLINE    (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_POLYLINE_BOX)
  369. #define M_VARPTS_OBJECT (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_SPLINE)
  370. #define M_OPEN_OBJECT    (M_POLYLINE_LINE | M_SPLINE_O | M_ARC)
  371. #define M_ROTATE_ANGLE    (M_VARPTS_OBJECT | M_ARC | M_TEXT | M_COMPOUND | M_ELLIPSE)
  372. #define M_ELLTEXTANGLE    (M_ELLIPSE | M_TEXT)
  373. #define M_OBJECT    (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_TEXT | M_ARC)
  374. #define M_NO_TEXT    (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_COMPOUND | M_ARC)
  375. #define M_ALL        (M_OBJECT | M_COMPOUND)
  376.  
  377. /************************  Objects  **********************/
  378.  
  379. extern F_compound objects;
  380.  
  381. /************  global working pointers ************/
  382.  
  383. extern F_line        *cur_l, *new_l, *old_l;
  384. extern F_arc        *cur_a, *new_a, *old_a;
  385. extern F_ellipse    *cur_e, *new_e, *old_e;
  386. extern F_text        *cur_t, *new_t, *old_t;
  387. extern F_spline        *cur_s, *new_s, *old_s;
  388. extern F_compound    *cur_c, *new_c, *old_c;
  389. extern F_point        *first_point, *cur_point;
  390. extern F_linkinfo    *cur_links;
  391.  
  392. /*************** object attribute settings ***********/
  393.  
  394. /*  Lines  */
  395. extern int    cur_linewidth;
  396. extern int    cur_linestyle;
  397. extern int    cur_joinstyle;
  398. extern int    cur_capstyle;
  399. extern float    cur_dashlength;
  400. extern float    cur_dotgap;
  401. extern float    cur_styleval;
  402. extern Color    cur_fillcolor, cur_pencolor;
  403. extern int    cur_fillstyle, cur_penstyle;
  404. extern int    cur_boxradius;
  405. extern int    cur_arrowmode;
  406. extern int    cur_arrowtype;
  407. extern int    cur_arctype;
  408.  
  409. /* Text */
  410. extern int    cur_fontsize;    /* font size */
  411. extern int    cur_latex_font;
  412. extern int    cur_ps_font;
  413. extern int    cur_textjust;
  414. extern int    cur_textflags;
  415.  
  416. /* Misc */
  417. extern float    cur_elltextangle;
  418.